package cn.iocoder.yudao.module.social.service.container;

import cn.iocoder.yudao.module.social.dal.dataobject.container.ContainerDO;
import cn.iocoder.yudao.module.social.enums.ContainerPermissionEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * 容器权限服务实现类
 *
 * @author 芋道源码
 */
@Service
@Slf4j
public class ContainerPermissionServiceImpl implements ContainerPermissionService {

    @Override
    public boolean canView(ContainerDO container, Long userId) {
        if (container == null) {
            return false;
        }

        String permission = container.getPermission();
        
        // 公开容器：所有人可见
        if (ContainerPermissionEnum.PUBLIC.getPermission().equals(permission)) {
            return true;
        }
        
        // 只读容器：所有人可见
        if (ContainerPermissionEnum.READONLY.getPermission().equals(permission)) {
            return true;
        }
        
        // 私有容器：仅创建者可见
        if (ContainerPermissionEnum.PRIVATE.getPermission().equals(permission)) {
            return Objects.equals(container.getCreatorUserId(), userId);
        }
        
        // 受限容器：需要特殊权限（这里简化为创建者可见，实际可扩展为权限表）
        if (ContainerPermissionEnum.RESTRICTED.getPermission().equals(permission)) {
            return Objects.equals(container.getCreatorUserId(), userId);
        }
        
        // 默认不可见
        return false;
    }

    @Override
    public boolean canPost(ContainerDO container, Long userId) {
        if (container == null || userId == null) {
            return false;
        }

        String permission = container.getPermission();
        
        // 公开容器：所有登录用户可发布
        if (ContainerPermissionEnum.PUBLIC.getPermission().equals(permission)) {
            return true;
        }
        
        // 只读容器：仅管理员可发布
        if (ContainerPermissionEnum.READONLY.getPermission().equals(permission)) {
            return canManage(container, userId);
        }
        
        // 私有容器：仅创建者可发布
        if (ContainerPermissionEnum.PRIVATE.getPermission().equals(permission)) {
            return Objects.equals(container.getCreatorUserId(), userId);
        }
        
        // 受限容器：需要特殊权限（这里简化为创建者可发布）
        if (ContainerPermissionEnum.RESTRICTED.getPermission().equals(permission)) {
            return Objects.equals(container.getCreatorUserId(), userId);
        }
        
        return false;
    }

    @Override
    public boolean canManage(ContainerDO container, Long userId) {
        if (container == null || userId == null) {
            return false;
        }
        
        // 创建者可以管理
        if (Objects.equals(container.getCreatorUserId(), userId)) {
            return true;
        }
        
        // 系统管理员可以管理（用户ID为1）
        if (Objects.equals(userId, 1L)) {
            return true;
        }
        
        return false;
    }

    @Override
    public boolean canDelete(ContainerDO container, Long userId) {
        if (container == null || userId == null) {
            return false;
        }
        
        // 只有创建者和系统管理员可以删除
        return canManage(container, userId);
    }

    @Override
    public boolean canEdit(ContainerDO container, Long userId) {
        if (container == null || userId == null) {
            return false;
        }
        
        // 只有创建者和系统管理员可以编辑
        return canManage(container, userId);
    }

}
